

let express = require("express");
let url = require("url");
let path = require("path");
let fsp = require("fs/promises");

var app = express();  // 创建服务

// app.use() 中间件  => 可以在请求的过程中配置一些内容

// 配置站点 
// express.static()  传入一个路径作为站点

// app.use(express.static(path.join(__dirname,"../site")));  //存前端代码
// app.use(express.static(path.join(__dirname,"../upload")));  //存上传内容

// 全局的中间件  =>  
// 1. 每次客户端发送请求到服务端 会依次经过每一个中间件(前提响应没有结束)
// 2. 向指定路由及其子路由进行拦截 -> 执行对应的中间件函数

// 路由
// /      根路由
// /user  一级路由
// /user/add  二级路由
// /user/add/a  三级路由


// next 调用堆栈中的下一个中间件  => 

// 常见应用:
// 执行任何代码。
// 对请求和响应对象进行更改。
// 结束请求-响应循环。0
// 调用堆栈中的下一个中间件。


// app.use(function(req,res,next){
//     console.log("这是全局的中间件:1","站点渲染");
//     next();
// });

// function urlparse(req,res,next){
//     console.log("这是全局的中间件:2","数据处理");
//     var URL = url.parse(req.url,true);
//     // console.log(URL);
//     req.query = URL.query;
//     next();
// }
// app.use(urlparse);

// app.use(function (req,res,next){
//     console.log("这是全局的中间件:2","数据处理");
//     var URL = url.parse(req.url,true);
//     // console.log(URL);
//     req.query = URL.query;
//     next();
// })


// app.use(function(req,res,next){
//     console.log("这是全局的中间件:3",req.query);
//     // res.end("end");
//     next();
// })

// 一般用于路由分离
// app.use("/user",function(req,res,next){
//     console.log("这是全局的中间件,对/user及其子路由进行拦截:1");
//     next();
// })

// app.use("/user",function(req,res,next){
//     console.log("这是全局的中间件,对/user及其子路由进行拦截:2");
//     next();
// })

// app.use("/user",function(req,res,next){
//     console.log("这是全局的中间件,对/user及其子路由进行拦截:3");
//     // next();

//     res.end("/user");
// })


// 局部中间件  => 只针对指定路由路径进行拦截
// app.get()    拦截以get方式向指定路由路径发送的请求
// app.post()   拦截以post方式向指定路由路径发送的请求
// app.all()    拦截以所有方式向指定路由路径发送的请求 

// app.get("/user",function(req,res,next){
//     console.log("这是局部中间件:1");
//     next()
// });


// app.get("/user",function(req,res,next){
//     console.log("这是局部中间件:2");
//     next()
// })

// app.get("/user",function(req,res,next){
//     console.log("这是局部中间件:2");
//     // next()
//     res.end();
// })

// [cb1,cb2,cb3]
// app.get("/user",function(req,res,next){
//     console.log("这是局部中间件:1");
//     next()
// },function(req,res,next){
//     console.log("这是局部中间件:2");
//     next()
// },function(req,res,next){
//     console.log("这是局部中间件:3");
//     // next()
//     res.end();
// })

// 错误中间件  => 一般放在所有中间件的最后方 => 用于捕获错误/处理错误

app.use(function(err,req,res){
    res.end(err.message);
})



app.listen(3000,function(){
    console.log("服务已经启动");
})

